#!groovy
pipeline {
  agent any
  stages {
    stage('初始化') {
      steps {
        echo "【信息】打印环境变量初始值"
        sh "printenv"

        echo "【信息】Job全部参数：${params}"

        script {
          Common = load './common/common.groovy'
          Common.applicationRootAbsolute = Common.getApplicationRootAbsolute(params.APPLICATION_ROOT_DIR)
        }

        // 拉取部署文件
        dir(Common.pipelineCicdDir) {
          git env.GIT_URL
        }

        // 拉取应用代码，需要安装插件git parameter
        git branch: params.APPLICATION_GIT_BRANCH, url: params.APPLICATION_GIT_URL

        dir(Common.applicationRootAbsolute) {
          script {
            Common.cicdYamlData = Common.readCicdYaml(params.ENV_OPTION, Common.applicationRootAbsolute)
          }
          sh """sed -i "s,{{jarStartCommand}},${Common.cicdYamlData.envData.jarStartCommand},g\" ${Common.pipelineCicdDir}/host/java/run.sh"""
        }
      }
    }

    stage('编译') {
      steps {
        dir(Common.applicationRootAbsolute) {
          echo "【信息】开始编译"
          sh "mvn clean install -D maven.test.skip=true"
        }
      }
    }

//    stage('SonarQube检查') {
//      steps {
//        dir(Common.applicationRootAbsolute) {
//          echo "【信息】开始SonarQube检测"
//          // credentialsId 填写凭证id
//          // installationName填写 Dashboard -> 配置 -> SonarQube installations Name
//          withSonarQubeEnv(credentialsId: 'sonaranalyse', installationName: 'SonarQubeServer') {
//            // 可使用的环境变量 SONAR_CONFIG_NAME、SONAR_HOST_URL、SONAR_AUTH_TOKEN
//            sh "mvn sonar:sonar -D sonar.projectName=${Common.cicdYamlData.applicationName} \
//                  -D sonar.projectKey=${Common.cicdYamlData.applicationName}-project-key \
//                  -D sonar.host.url=${env.SONAR_HOST_URL} \
//                  -D sonar.login=${env.SONAR_AUTH_TOKEN}"
//          }
//          script {
//            // timeout() 作用：为了防止出现问题，管道将在超时后被杀死
//            timeout(20) {
//              // waitForQualityGate步骤将暂停管道，直到SonarQube分析完成并返回QualityGate状态。
//              def qualityGate = waitForQualityGate('SonarQubeServer')
//              if (qualityGate.status != 'OK') {
//                error "【异常】SonarQube检测不通过: ${qualityGate}"
//              }
//            }
//          }
//        }
//      }
//    }

    stage("部署") {
      steps {
        dir(Common.applicationRootAbsolute) {
          echo "【信息】开始部署"
          script {
            for (int i = 0; i < Common.cicdYamlData.envData.ipArr.length; i++) {
              def serverIp = Common.cicdYamlData.envData.ipArr[i]
              sh """
                ssh root@${serverIp} "mkdir -p /usr/local/${Common.cicdYamlData.applicationName}"
                scp target/*.jar root@${serverIp}:/usr/local/${Common.cicdYamlData.applicationName}/${Common.cicdYamlData.applicationName}.jar
                scp ${Common.pipelineCicdDir}/host/java/run.sh root@${serverIp}:/usr/local/${Common.cicdYamlData.applicationName}/run.sh
                ssh root@${serverIp} "cd /usr/local/${Common.cicdYamlData.applicationName};
                    chmod +x run.sh;
                    ./run.sh ${Common.cicdYamlData.applicationName} ${Common.cicdYamlData.envData.stopStartInterval}"
               """
            }
          }
        }
      }
    }

  }
  post {
    success {
      script {
        if (Common.cicdYamlData.notice.wx.ciSuccessSend || Common.cicdYamlData.notice.wx.cdSuccessSend) {
          Common.curlWx(Common.cicdYamlData.notice.wx.key, env.JOB_NAME, Common.cicdYamlData.envData.envName, true)
        }
      }
    }
    failure {
      script {
        if (Common.cicdYamlData.notice.wx.ciFailureSend || Common.cicdYamlData.notice.wx.cdFailureSend) {
          Common.curlWx(Common.cicdYamlData.notice.wx.key, env.JOB_NAME, Common.cicdYamlData.envData.envName, false)
        }
      }
    }
  }
}


